package domain;

import java.util.Collection;
import java.util.Date;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.Valid;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotBlank;
import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Access(AccessType.PROPERTY)
public class Reunion extends DomainEntity {

	private String propuestas;
	private Date fechaCelebracion;
	private String asunto;
	private Double importe;

	public Reunion() {
		super();
	}

	@NotBlank
	public String getPropuestas() {
		return propuestas;
	}

	public void setPropuestas(String propuestas) {
		this.propuestas = propuestas;
	}

	@NotNull
	@Temporal(TemporalType.TIMESTAMP)
	@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm")
	public Date getFechaCelebracion() {
		return fechaCelebracion;
	}

	public void setFechaCelebracion(Date fechaCelebracion) {
		this.fechaCelebracion = fechaCelebracion;
	}

	@NotBlank
	public String getAsunto() {
		return asunto;
	}

	public void setAsunto(String asunto) {
		this.asunto = asunto;
	}

	@Digits(integer = 4, fraction = 2)
	@Min(0)
	public Double getImporte() {
		return importe;
	}

	public void setImporte(Double importe) {
		this.importe = importe;
	}

	// Relaciones
	private Collection<Vecino> asistentes;
	private Vecino presidente;
	private Collection<Acta> actas;
	private ComunidadDeVecinos comunidadDeVecinos;

	@ManyToMany
	public Collection<Vecino> getAsistentes() {
		return asistentes;
	}

	public void setAsistentes(Collection<Vecino> asistentes) {
		this.asistentes = asistentes;
	}

	@Valid
	@ManyToOne(optional = false)
	@NotNull
	public Vecino getPresidente() {
		return presidente;
	}

	public void setPresidente(Vecino presidente) {
		this.presidente = presidente;
	}

	@OneToMany(mappedBy = "reunion")
	public Collection<Acta> getActas() {
		return actas;
	}

	public void setActas(Collection<Acta> actas) {
		this.actas = actas;
	}

	@Valid
	@ManyToOne(optional = false)
	public ComunidadDeVecinos getComunidadDeVecinos() {
		return comunidadDeVecinos;
	}

	public void setComunidadDeVecinos(ComunidadDeVecinos comunidadDeVecinos) {
		this.comunidadDeVecinos = comunidadDeVecinos;
	}

}
